/************
 * 为vue封装一个ajax方法
 * Created by donkey on 2018/2/9
 * 说明:$http使用方式等同于$axios,$http加入了权限控制机制, 并在子属性中添加了一些方法
 ************/

import Axios from './permission/Axios.js'

//扩展方法
const AxiosInsert = {
    Datas(url, entity) {
        return Axios
            .post(url, entity)
            .catch(error => {
                console.log(error);
            });
    },
    getDatas(url, entity) {
        return Axios
            .get(url, entity)
            .catch(error => {
                console.log(error);
            });
    },
    SaveOrUpdate(url, entity, type) {
        // addFormCache 清空临时保存的表单
        let arg = window.addFormCacheArg
        window.addFormCacheArg = null
        if (arg) {
            sessionStorage.removeItem('addFormCache')
            window.Vue.prototype.$http({
                url: 'admin/form/clear',// 保存
                method: 'post',
                data: {
                    identity: arg
                }
            })
        }
        // addFormCache end

        if (type === 'file') {
            if (entity != null) {
                //通过append向form对象添加数据
                let param = new FormData(); //创建form对象
                for (let key in entity) {
                    if (key === "file") {
                        param.append('file', entity[key]);
                    } else {
                        param.append(key, entity[key]);
                    }
                }

                let config = {
                    headers: {'Content-Type': 'multipart/form-data'}
                };  //添加请求头
                return Axios.post(url, param, config);
            }
        } else {
            return Axios({
                headers: {
                    'Content-Type': 'application/json'
                },
                dataType: 'json',
                url: url,
                method: "post",
                data: JSON.stringify(entity)
            }).catch((error) => {
                console.log('提交失败:' + error);
            })
        }
    },
    GetDictData(view_names, label_names, params, flag) {
        return Axios
            .post("/admin/common/data/getDictData", {
                view_names: view_names,     // 后端的字段模板
                label_names: label_names,   // 对应后端字段模板,请求成功后返回的字段名称
                params: params,             // dep_code
                flag: flag,                 // "1" 所在部门及下属部门，'like%'；其它，直属下属部门,'='
            })
            .catch(error => {
                console.log(error);
            })

    },
    // 下面写你的方法
    /**
     *  查询数据字典公共方法
     * @param viewNames 后端的字段模板
     * @param labelNames 对应后端字段模板,请求成功后返回的字段名称
     * @returns {undefined|Promise<T>}
     */
    findViews(viewNames, labelNames) {
        return Axios
            .post("/system/dict/findByViews", {
                viewNames: viewNames,     // 后端的字段模板
                labelNames: labelNames,   // 对应后端字段模板,请求成功后返回的字段名称
            })
            .catch(error => {
                console.log(error);
            })
    }
}

for (let i in AxiosInsert) {
    Axios[i] = AxiosInsert[i];
}
Object.defineProperty(window.Vue.prototype, '$http', {
    value: Axios
});
